package com.zaimokuza.cn.entity.enums;

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 自定义异常的枚举
 *
 * @author zaimokuza
 */
@Getter
@AllArgsConstructor
public enum CustomizeExceptionEnum {

    // 用户相关枚举
    USER_NO_PERMISSION(403, false, "权限不足！"),
    USER_LOGIN_FAILURE(402, false, "登录失败！"),
    USER_NOT_REGISTER(402, false, "该手机号未注册！"),
    USER_IS_LOCKED(402, false, "用户被锁定，请联系管理员！"),
    USER_IS_DISABLED(402, false, "用户被禁用，请联系管理员！"),
    USER_ACCOUNT_EXPIRE(402, false, "用户账号过期，请联系管理员！"),
    USER_PASSWORD_EXPIRE(402, false, "用户密码过期，请联系管理员！"),
    USER_BAD_CREDENTIALS(402, false, "用户名或密码错误！"),
    USER_NEED_LOGIN(401, false, "请先登录！"),
    USER_LOGIN_TIME_OUT(401, false, "登录凭证已经过期，请重新登录！"),
    USER_NOT_FOUND(404, false, "用户不存在！"),

    USER_NAME_IS_REPEAT(5001, false, "昵称已被使用，请更换！"),
    USER_PHONE_IS_REPEAT(5002, false, "手机号已被使用，请更换！"),
    USER_DOMAIN_IS_REPEAT(5003, false, "域名已被使用，请更换！"),

    // 博客相关异常
    BLOG_NOT_FOUND(404, false, "未找到指定博客！"),
    BLOG_NOT_EXIST(5201, false, "博客已被删除或者不存在！"),

    // 博客分类相关异常
    CLASSIFICATION_NOT_FOUND(404, false, "未找到指定分类！"),
    CLASSIFICATION_NAME_IS_REPEAT(5302, false, "名称重复，请修改分类名称！"),
    CLASSIFICATION_IS_USE(5303, false, "分类下方还存在博客，请先更换下方博客分类！"),

    // 博客标签相关异常
    TAG_NAME_IS_NULL(5401, false, "请填写有效的标签名称！"),
    TAG_NAME_IS_REPEAT(5402, false, "已存在当前名称的标签！"),

    // 评论相关异常
    COMMENT_NOT_FOUND(404, false, "未找到指定评论！"),

    // 关注相关异常
    FOLLOW_REPEAT(5601, false, "重复关注！"),
    UNFOLLOW_REPEAT(5602, false, "重复取消关注！"),

    // 点赞相关异常
    LIKE_REPEAT(5701, false, "重复点赞！"),
    UNLIKE_REPEAT(5702, false, "重复取消点赞！"),

    // 文件相关异常
    FILE_ERROR(5801, false, "无效文件，请重新上传！"),
    FILE_TYPE_ERROR(5802, false, "文件类型无法识别，请重新上传！"),
    FILE_MKDIR_ERROR(5803, false, "创建文件夹失败！"),

    // 短信相关异常
    SMS_SEND_ERROR(5901, false, "短信发送失败！"),

    // 基础枚举
    SUCCESS(200, true, "操作成功！"),
    FAILED(500, false, "操作失败！"),
    VALIDATION_FAILED(5000, false, "参数校验失败！");

    @ApiModelProperty("状态码")
    private final Integer resultCode;
    @ApiModelProperty("调用是否成功")
    private final Boolean isSuccess;
    @ApiModelProperty("提示信息")
    private final String resultMsg;

}
